package com.wyp.design.pattern.creational.singleton.lazy.staticinnerclass;


/**
 * 懒汉式加载以及线程安全。使用静态内部类，让其他线程看不见初始化过程中的重排序。
 *
 * @author: yipeng.wang01@hand-china.com-25490
 * @TIME: 2020/1/2/13:40
 **/
public class LazySingletonStaticInnerClass {

    private static class InnerClassInstance {
        private static LazySingletonStaticInnerClass lazySingleton = new LazySingletonStaticInnerClass();
    }

    /**
     * 何为类的初始化，一个类在线程加载class之后，在被线程使用之前都属于类的初始化。在这个阶段会执行类的初始化，在执行类的初始化时，
     * jvm会获取一个锁，这个锁可以同步多个线程对同一个类的初始化操作，基于这个特性，实现基于静态内部类的，线程安全的，延迟加载的的初始化方案
     *在这种模式中，初始化过程中的重排序是对线程1不可见的。
     *
     * @return
     */
    public static LazySingletonStaticInnerClass getInstance() {
        return InnerClassInstance.lazySingleton;
    }

    private LazySingletonStaticInnerClass() {
    }
}
